#include<iostream>
#include<cmath>
#include<queue>
#include<string>
#include<math.h>
#include<stack>
#include<vector>
#include<set>
#include <set>
#include <unordered_map>
using namespace std;

int main()
{
    set<int,greater<int>> s1;//仿函数其实是一个模板类，注意仿函数一定是一个类，我们在使用模板的时候就是使用的类型为待传递的参数
    //所以我们可以将这个类型作为模板参数传递，这个类很特殊，其具有‘（）’的符号重载，
    // 当我们传递这个类型后，其函数内部可以使用这个类型进行实例化，
    s1.insert(5);
    s1.insert(2);
    s1.insert(4);
    s1.insert(1);
    s1.insert({1,2,3,6,3,7,5,9,2});
    set<int,greater<int>>::reverse_iterator it = s1.rbegin();
    while (it != s1.rend())
    {
        cout << *it << ' ';
        it++;
    }
    cout << endl;
    auto itlow = s1.lower_bound(3);
    auto itup = s1.upper_bound(6);
    s1.erase(itup, itlow);//注意所有的迭代器都是左闭右开的，所以要删除[3,6]，lower_biund找的应该是该树在[3,6]区间的最小值，
    //upper_bound找的是该树中大于6的最小值
    for (auto& e : s1)
        cout << e << ' ';
    cout << endl;
    return 0;
}